﻿using System;

namespace StudentManagement
{
    /// <summary>
    /// 学生类，用于表示和管理学生信息
    /// </summary>
    public class Student
    {
       
        private string _studentId;   
        private string _name;        
        private int _age;            
        private string _gender;      
        private double _score;      
        
        public string StudentId
        {
            get => _studentId;
            set
            {
                // 简单验证：学号不能为空
                if (string.IsNullOrWhiteSpace(value))
                    throw new ArgumentException("学号不能为空");
                _studentId = value;
            }
        }

        public string Name
        {
            get => _name;
            set
            {
                if (string.IsNullOrWhiteSpace(value))
                    throw new ArgumentException("姓名不能为空");
                _name = value;
            }
        }

        public int Age
        {
            get => _age;
            set
            {
                // 年龄范围验证（假设学生年龄在5-50岁之间）
                if (value < 5 || value > 50)
                    throw new ArgumentOutOfRangeException("年龄必须在5到50之间");
                _age = value;
            }
        }

        public string Gender
        {
            get => _gender;
            set
            {
                // 性别验证（只能是"男"或"女"）
                if (value != "男" && value != "女")
                    throw new ArgumentException("性别只能是'男'或'女'");
                _gender = value;
            }
        }

        public double Score
        {
            get => _score;
            set
            {
                // 成绩范围验证（0-100分）
                if (value < 0 || value > 100)
                    throw new ArgumentOutOfRangeException("成绩必须在0到100之间");
                _score = value;
            }
        }

        // 构造函数（初始化学生信息）
        public Student(string studentId, string name, int age, string gender, double score)
        {
            StudentId = studentId;  // 通过属性赋值，触发验证逻辑
            Name = name;
            Age = age;
            Gender = gender;
            Score = score;
        }

        // 无参构造函数（便于序列化或动态创建对象）
        public Student() { }

        // 方法：显示学生信息
        public void ShowInfo()
        {
            Console.WriteLine($"学号：{StudentId}");
            Console.WriteLine($"姓名：{Name}");
            Console.WriteLine($"年龄：{Age}");
            Console.WriteLine($"性别：{Gender}");
            Console.WriteLine($"成绩：{Score}");
            Console.WriteLine($"等级：{GetGrade()}"); // 调用成绩等级评定方法
        }

        // 方法：根据成绩获取等级（A/B/C/D/E）
        public string GetGrade()
        {
            if (Score >= 90) return "A";
            if (Score >= 80) return "B";
            if (Score >= 70) return "C";
            if (Score >= 60) return "D";
            return "E";
        }

        // 方法：更新学生成绩
        public void UpdateScore(double newScore)
        {
            Score = newScore; // 通过属性赋值，自动验证
            Console.WriteLine($"{Name}的成绩已更新为：{newScore}");
        }
    }

    // 测试类（用于演示Student类的使用）
    class Program
    {
        static void Text(string[] args)
        {
            try
            {
                // 创建学生对象
                Student student = new Student("2025001", "张三", 18, "男", 85);
                
                // 显示学生信息
                Console.WriteLine("学生信息：");
                student.ShowInfo();

                // 更新成绩并再次显示
                student.UpdateScore(92);
                student.ShowInfo();
            }
            catch (Exception ex)
            {
                Console.WriteLine($"错误：{ex.Message}");
            }
        }
    }
}